package main

import "fmt"

// 定义数组的结构在包内作用语不能用  :=

//var 数组名 = [数组大小]类型 {数据,数据,数据.....}, 初始赋值了
var s1 = [3]int{1, 2, 3}

//var 数组名 [数组大小]类型 ,默认零值
var a1 [3]bool

//在里面也可以这么定义
var (
	b1 [3]bool
	b2 = [3]bool{false, true, true}
)

func main() {

	//定义局部的数组变量
	var s1 [3]int

	//注意数组的类型就是[数组大小]类型
	//s1的类型[3]int
	fmt.Printf("s1的类型%T\n", s1)

	//可以用:= 快捷赋值
	//[1 2 3]
	b3 := [3]int{1, 2, 3}
	fmt.Println(b3)

	//可以不知道大小定义数组,注意不预设的大小的数组类型还是按照实际大小作为类型的
	//b4的类型:[4]int
	b4 := [...]int{1, 2, 3, 5}
	fmt.Printf("b4的类型:%T\n", b4)

	//根据索引进行赋值
	//[1 0 0 0 0 0 0 0 0 10]
	b5 := [...]int{0: 1, 9: 10}
	fmt.Println(b5)
	// 数组的遍历
	city := [...]string{"北京", "上海", "深圳"}

	// for 初始变量; 进入条件;执行以后的后置动作{
	//     循环业务
	//}
	for i := 0; i < len(city); i++ {
		fmt.Print(i)
		fmt.Println(city[i])
	}

	//for range写法
	for i, s := range city {
		fmt.Println(i, s)
	}

	//多维数组就是俗称数组里面存的数组
	//全写
	var a11 [3][2]int
	a11 = [3][2]int{
		[2]int{1, 2},
		[2]int{3, 4},
		[2]int{5, 6},
	}
	fmt.Println(a11)

	//简写
	b6 := [3][2]int{
		{1, 2},
		{1, 2},
		{1, 2},
	}
	fmt.Println(b6)

	for _, v1 := range b6 {
		fmt.Printf("v1:%v ", v1)
		for _, v2 := range v1 {
			fmt.Printf("v2:%v ", v2)
		}
		fmt.Println("")
	}
}
